package linkedList;

import java.util.Scanner;

/**
 * @autor calin
 * @date 2019/12/10 - 12:37
 *题目（括号里为原题基础上的补充）：编号为1-52张牌，正面向上，从第2张开始，以2为基数，是2的倍数翻牌一次（牌只能翻一次），
 *直到最后一张牌；然后，从第3张开始（此句指从第三张还是正面的牌开始），以3为基数，是3的倍数翻牌一次（牌可以翻无数次），直
 *到最后一张牌；。。。直到从从第52张开始，（此句指从第三张还是正面的牌开始）以52为基数，是52的倍数翻牌一次，直到最后一张牌
 */
public class Main {
    public static void main(String[] args) {

        //创建单链表
        LinkedList<Integer> lista = new LinkedList<Integer>();
        int n;
        //键盘输入并排除异常
        Scanner sc=new Scanner(System.in);
        for (;;) {
            System.out.println("请输入n=");

            try {
                n = Integer.parseInt(sc.nextLine().trim());
               // if (sc.nextInt()<=0)
                break;
            } catch (NumberFormatException nfe) {
                System.out.print("输入数据类型错误！你应该输入整型数据\n");
                continue;
            }

        }

        System.out.println("输入成功");
        sc.close();

        //一个辅助数组,用来标记未翻的牌，翻过牌则此下标为1
        int [] f=new int[n];

//第2种理解

        //存储数据
        for (int i = 1; i <= n; i++) {
            lista.insert(i,i);
        }
        System.out.println("n的取值为："+n);
        System.out.println("牌的编号为："+lista.toString());

        //实现
        for (int j = 1; j <n; j++) {
            //符合条件的做备注
            int bw=0;//bw表示补位
            for (int m = j; m <n-bw; m++) {
               if (lista.get(m)!=null){
                   int qu=lista.get(m);
                   if (isBeishu(qu,j+1))//如果是2的倍数,那么翻牌
                       f[m]=1;           //把辅助数组相同下标的元素变为1
               }

            }
            //删除符合条件的
            for (int b = 0; b <n; b++) {
                if (f[b]==1) {       //如果数组值为1，说明对应下标翻牌
                    lista.remove(b - bw);//删除已翻的牌
                    bw++;
                    f[b] = 0;//返回初始值
                }
                else f[b]=0;

            }
         }


        System.out.println("此时正面向上的牌的集合为："+lista.toString());

    }
    //判断某数是否为某数的倍数
    public static Boolean isBeishu(int shu, int bs){
        if(shu%bs==0)
            return true;
        else return false;
    }

}

